package usesynchronized;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 74646
 * Date: 2022-05-08
 * Time: 8:59
 */
class Counter4 {
    // 自增变量
    public static int count;
    /**
     * 使用 synchronized 修饰静态方法
     * 静态方法更严谨的叫法：类方法
     * 普通方法更严谨的叫法：实例方法
     * synchronized 修饰静态方法就是针对类对象加锁
     * 类对象就是在程序运行的时候，.class文件被加载到了JVM内存中的模样
     */
    public  static void increase(){
        synchronized(Counter5.class){
            count++;
        }
    }

}

public class Demo4 {
    private static Counter4 counter = new Counter4();

    public static void main(String[] args) {
        Thread t1 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                counter.increase();
            }
        });
        Thread t2 = new Thread(()->{
            for (int i = 0; i < 50000; i++) {
                counter.increase();
            }
        });
        t1.start();
        t2.start();

        /**
         * 因为 main 线程与 t1,t2 线程是并发执行的，会导致 t1,t2 线程还没执行完就执行下面的打印操作
         * 为了保证 t1,t2 线程都执行完了再打印 count，
         * 所以调用 join 方法，等待 t1,t2 线程都执行完了再打印
         */
        try {
            t1.join();
            t2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(counter.count);
    }
}